﻿using ExcellentProjectPlus.Seguridades.Servicios.PerfilPersonas;
using ExcellentProjectPlus.Dominio.Seguridades.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace ExcellentProjectPlus.Seguridades.PerfilPersonas
{
    public class ServicioDeGestionDePerfilPersonas : IServicioDeGestionDePerfilPersonas
    {
        #region Propiedades
        IServicioDeAdministracionDePerfilPersonas _servicioDeAdministracionDePerfilPersonas;
        #endregion

        #region Constructores
        public ServicioDeGestionDePerfilPersonas(IServicioDeAdministracionDePerfilPersonas servicioDeAdministracionDePerfilPersonas)
        {
            _servicioDeAdministracionDePerfilPersonas = servicioDeAdministracionDePerfilPersonas;
        }
        #endregion

        public IEnumerable<PerfilPersona> ObtenerPerfilPersonas()
        {
            IEnumerable<PerfilPersona> resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDePerfilPersonas.ObtenerPerfilPersonas();
                transaccion.Complete();
            }

            return resultado;
        }

        public PerfilPersona ObtenerPerfilPersonaPorId(int id)
        {
            PerfilPersona resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadCommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDePerfilPersonas.ObtenerPerfilPersonaPorId(id);
                transaccion.Complete();
            }
            return resultado;
        }

        public void AgregarPerfilPersona(PerfilPersona perfilPersona)
        {
            _servicioDeAdministracionDePerfilPersonas.AgregarPerfilPersona(perfilPersona);
        }
        public void ModificarPerfilPersona(PerfilPersona perfilPersona)
        {
            _servicioDeAdministracionDePerfilPersonas.ModificarPerfilPersona(perfilPersona);
        }
        public void EliminarPerfilPersona(PerfilPersona perfilPersona)
        {
            _servicioDeAdministracionDePerfilPersonas.EliminarPerfilPersona(perfilPersona);
        }
    }
}
